package com.zhang.yunfu_norevocation.comm.Utils;
import cn.com.infosec.nettsa.NetTSAClient;
import com.alibaba.fastjson.JSON;

/**
 * @author zsj
 * @description
 * @createDate 2025/11/4 16:36
 * @Entity com.zhang.yunfu_norevocation.entity.
 */
public class GetTimeStampToken {

    // 获取时间戳以及时间戳令牌
    public static void main(String[] args) {
        NetTSAClient client = new NetTSAClient("19.193.200.171", 1000, 1000);  /*服务IP：19.193.200.171 端口：8200 */
        int port = 8200;   // TODO 换成所给的服务端口

        String plainData = "明文数据";
        // 1. 创建时间戳请求并获取时间戳令牌
        String tokenJsonStr = client.CreateSM2TSReqForTSToken(plainData, port);
        // tokenBase64为时间戳令牌的Base64编码格式
        String tokenBase64 = JSON.parseObject(tokenJsonStr).getString("data");

        // 2. 解析时间戳令牌，获取json格式信息
        String parseResult = client.parseTSToken(tokenBase64, port);
        System.out.println("SM2时间戳令牌解析结果(json): " + parseResult);

        if (parseResult == null) {
            System.out.println("解析时间戳令牌失败");
            return;
        }
        // 3. 从解析结果中提取所需信息
        String timestamp = JSON.parseObject(parseResult).getJSONObject("data").getString("createTime");
        String serialNum = JSON.parseObject(parseResult).getJSONObject("data").getString("serialNum");

        System.out.println("=== 时间戳令牌解析结果 ===");
        System.out.println("签名值: " + tokenBase64);
        System.out.println("时间戳: " + timestamp);
        System.out.println("序列号: " + serialNum);

        // 验证时间戳令牌
        String verifyResult = client.verifyByTSToken(plainData, tokenBase64, port);
        System.out.println("SM2验证结果: " + verifyResult);
    }
}
